import numpy as np
import pandas as pd    #导入库
from sklearn.impute import SimpleImputer as Imputer  #注意此库函数的引用，和以往有变化
from sklearn.preprocessing import LabelEncoder,OneHotEncoder
from sklearn.model_selection import train_test_split #拆分数据集
from sklearn.preprocessing import StandardScaler
dataset = pd.read_csv('Data.csv') #读取csv文件
X = dataset.iloc[:,:-1].values  #.iloc[行，列]
Y = dataset.iloc[:,3].values #: 全部行 or 列；[a]第a行 or 列
                           #[a,b,c]第 a,b,c 行 or 列
print(Y)
#X = pd.DataFrame(X)
#处理丢失数据
#imputer = Imputer(missing_values="NaN",strategy="mean")
#X.dropna(inplace=True)
imputer = Imputer(missing_values=np.nan,strategy='mean')
imputer = imputer.fit(X[:,1:3])
X[:,1:3] = imputer.transform(X[:,1:3])#fit 后有transform（对数据进行归一化处理）

#解析分类数据
labelencoder_X = LabelEncoder() #简单来说 LabelEncoder 是对不连续的数字或者文本进行编号
X[:,0] = labelencoder_X.fit_transform(X[:,0])

#创建虚拟变量
onehotencoder = OneHotEncoder(categories='auto') #OneHotEncoder 用于将表示分类的数据扩维
X=onehotencoder.fit_transform(X).toarray()
labelencoder_Y =LabelEncoder()
Y = labelencoder_Y.fit_transform(Y)

#拆分数据集
X_train,X_test,Y_train,Y_test = train_test_split(X,Y,test_size=0.2,random_state=0)

#特征量化
sc_X = StandardScaler() #得到的结果是，对于每个属性/每列来说所有数据都聚集在0附近，标准差为1，使得新的X数据集方差为1，均值为0
X_train = sc_X.fit_transform(X_train)
X_test = sc_X.transform(X_test)  #fit_transform方法是fit和transform的结合，fit_transform(X_train) 意思是找出X_train的均值和标准差，并应用在X_train上。这时对于X_test，我们就可以直接使用transform方法。因为此时StandardScaler已经保存了X_train的均值和标准差。
